<?php
/**
 * Smarty Internal Plugin Compile Capture
 *
 * Compiles the {capture} tag
 *
 * @package Smarty
 * @subpackage Compiler
 * @author Uwe Tews
 */

/**
 * Smarty Internal Plugin Compile Capture Class
 *
 * @package Smarty
 * @subpackage Compiler
 */
class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
	
	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $shorttag_order = array ('name' );
	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $optional_attributes = array ('name', 'assign', 'append' );
	
	/**
	 * Compiles code for the {capture} tag
	 *
	 * @param $args array
	 *       	 array with attributes from parser
	 * @param $compiler object
	 *       	 compiler object
	 * @return string compiled code
	 */
	public function compile($args, $compiler) {
		// check and get attributes
		$_attr = $this->getAttributes ( $compiler, $args );
		
		$buffer = isset ( $_attr ['name'] ) ? $_attr ['name'] : "'default'";
		$assign = isset ( $_attr ['assign'] ) ? $_attr ['assign'] : 'null';
		$append = isset ( $_attr ['append'] ) ? $_attr ['append'] : 'null';
		
		$compiler->_capture_stack [0] [] = array ($buffer, $assign, $append, $compiler->nocache );
		// maybe nocache because of nocache variables
		$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
		$_output = "<?php \$_smarty_tpl->_capture_stack[0][] = array($buffer, $assign, $append); ob_start(); ?>";
		
		return $_output;
	}

}

/**
 * Smarty Internal Plugin Compile Captureclose Class
 *
 * @package Smarty
 * @subpackage Compiler
 */
class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
	
	/**
	 * Compiles code for the {/capture} tag
	 *
	 * @param $args array
	 *       	 array with attributes from parser
	 * @param $compiler object
	 *       	 compiler object
	 * @return string compiled code
	 */
	public function compile($args, $compiler) {
		// check and get attributes
		$_attr = $this->getAttributes ( $compiler, $args );
		// must endblock be nocache?
		if ($compiler->nocache) {
			$compiler->tag_nocache = true;
		}
		
		list ( $buffer, $assign, $append, $compiler->nocache ) = array_pop ( $compiler->_capture_stack [0] );
		
		$_output = "<?php list(\$_capture_buffer, \$_capture_assign, \$_capture_append) = array_pop(\$_smarty_tpl->_capture_stack[0]);\n";
		$_output .= "if (!empty(\$_capture_buffer)) {\n";
		$_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n";
		$_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n";
		$_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n";
		$_output .= "} else \$_smarty_tpl->capture_error();?>";
		return $_output;
	}

}

?>